package com.cskaoyan.javase.oop2._1extend._2advantage;

/**
 * @description: 继承的优缺点
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * - 在一款游戏中，我们有很三种类型的鸭子，这些鸭子都有共同属性，都可以叫（cry），都可以游泳（swim）
 * - 应该怎么编写这些鸭子类？
 * - 需求更改了，这些鸭子不能游泳了，但是都会飞（fly）
 * - 最后我添加了一种鸭子，第四种鸭子，这个鸭子不会飞
 *
 * 继承的优点:
 *      1,代码复用
 *      2,复用代码,提升程序的可维护性,扩展性更好
 * 继承的缺点:
 *      子类必须无脑接受父类的成员,没有办法进行选择.父类成员的修改会严格体现到每一个子类中
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        ForthTypeDuck ftd = new ForthTypeDuck();
        ftd.fly();
    }
}

//提供一个鸭子的父类,作为创建子类的一个共同特点的提取
class Duck {
    String name;
    public void cry(){
        System.out.println("嘎嘎嘎");
    }
    /*public void swim(){
        System.out.println("黄毛浮绿水,红掌拨清波!");
    }*/
    public void fly(){
        System.out.println("我会飞了!");
    }
}
class FirstTypeDuck extends Duck{

}
class SecondTypeDuck extends Duck{}
class ThirdTypeDuck extends Duck{}
class ForthTypeDuck extends Duck{
    //方法的覆盖(重写)
    //子类在继承方法的同时,可以选择自己重写该方法
    public void fly(){
        System.out.println("我不会飞!");
    }
}